package 笔试;

import java.util.HashMap;
import java.util.Map;

public class 和等于k的最长子数组长度 {
    public int maxSubArrayLen(int[] nums, int k) {
        Map<Integer,Integer> map = new HashMap<>(nums.length);
        int res = 0;
        int sum = 0;
        map.put(0,-1);
        for(int i = 0;i<nums.length;i++){
            sum+=nums[i];
            // 如果找到一个区间和 = sum-k; 那么用当前下标减去之前的区间和 就为和为 k 的区间
            if(map.containsKey(sum-k)){
                res = Math.max(res,i - map.get(sum-k));
            }
            // 如果之前这个和有对应下标，不更新
            map.putIfAbsent(sum,i);
        }

        return res;
    }
}
